/*
 * master_srv.h
 *
 *  Created on: 2018年11月5日
 *  Author: Degang.Wu (windragon@126.com)
 *  Desc:
 */

#ifndef MASTET_SRV_H_
#define MASTET_SRV_H_

#include "enc_listener.h"

namespace hiapp
{

typedef int (*bwhandlefd)(int fd, void* param);

typedef struct _sub_board
{
	int		status;		// 实时查询刷新
	int		reg_flag;	// 已注册标识
	int		event;		// 有事件要处理（如初始化配置）
}stSUB_BOARD;

class MasterSrv: public Listener
{
public:
	MasterSrv(U16 _port);
	virtual ~MasterSrv();

protected:
	virtual void onRun();
	virtual int process(pU8 msg, int sock);
	void 	process_reg(pU8 msg, int sock);

	static void send_initcfg_thread(void* param);
	void 	do_send_init();

	static void query_status(void* param);
	void	do_query_status();

	static void check_cfgchange(void* param);
	void 	do_check_cfgchange();

	static void check_network_change(void* param);
	void 	do_check_network();

	static int recv_status(int sock, void* param);

	int 	send_msg(U32 sbidx, pU8 buf, U32 buflen, bwhandlefd recv_response = NULL);
	int 	init_network();

	void	change_sboard_status(int sbidx, int status);

	void 	sync_mst_time(U32 time_sec);

	virtual void onStop();


private:
//	U8		sboard_status[ENC_MAX_SUB_BOARD];
//	U8		sboard_flag[ENC_MAX_SUB_BOARD];
	stSUB_BOARD		sboard[ENC_MAX_SUB_BOARD];

	pthread_mutex_t		sb_mutex;
	pthread_cond_t		sb_cond;

	int					first_reg_sboard;
};

} /* namespace hiapp */

#endif /* MASTET_SRV_H_ */
